Fixed memory leak at window closing in DirectFB backend, patch provided by Simon...
authorAttilio Fiandrotti <attilio@src.gnome.org>
Thu, 12 Jul 2007 17:09:02 +0000 (17:09 +0000)
committerAttilio Fiandrotti <attilio@src.gnome.org>
Thu, 12 Jul 2007 17:09:02 +0000 (17:09 +0000)
svn path=/trunk/; revision=18459

ChangeLog
gdk/directfb/gdkevents-directfb.c
gdk/directfb/gdkprivate-directfb.h
gdk/directfb/gdkwindow-directfb.c

index fbebaa039e115879d13e0af8e6858da95a4f9184..5e940503253ed5e8ce34128155588323deed0e19 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-07-12  Attilio Fiandrotti  <attilio.fiandrotti@gmail.com>
+
+       * gdk/directfb/gdkevents-directfb.c:
+       * gdk/directfb/gdkwindow-directfb.c:
+       * gdk/directfb/gdkprivate-directfb.h: Fixed memory leak at window closing,
+       patch provided by Simon Lanzmich
+
 Thu Jul 12 18:03:02 2007  Tim Janik  <timj@gtk.org>
 
        * gdk/gdk.c (gdk_threads_add_idle_full): clarified documentation example.
index e3babd41502ca297703969d3176009ea54f0bf09..2f55b26ca198477ec973fcde722c31deb2d4d31d 100644 (file)
@@ -315,6 +315,25 @@ gdk_directfb_event_windows_add (GdkWindow *window)
     impl->window->CreateEventBuffer (impl->window, &EventBuffer);
 }
 
+#if (DIRECTFB_MAJOR_VERSION >= 1)
+void
+gdk_directfb_event_windows_remove (GdkWindow *window)
+{
+  GdkWindowImplDirectFB *impl;
+
+  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (window)->impl);
+
+  if (!impl->window)
+    return;
+
+  if (EventBuffer)
+    impl->window->DetachEventBuffer (impl->window, EventBuffer);
+/* FIXME: should we warn if (! EventBuffer) ? */
+}
+#endif
+
 GdkWindow *
 gdk_directfb_child_at (GdkWindow *window,
                        gint      *winx,
index b4090bb828069d25b21903fde4c4c748a09f3dfb..b645057f32bb986a2d05a50a3759c3a3cd67fd8d 100644 (file)
@@ -231,6 +231,9 @@ GdkImage* _gdk_directfb_copy_to_image (GdkDrawable  *drawable,
                                        gint          height);
 
 void       gdk_directfb_event_windows_add (GdkWindow *window);
+#if (DIRECTFB_MAJOR_VERSION >= 1)
+void       gdk_directfb_event_windows_remove (GdkWindow *window);
+#endif
 
 GdkGrabStatus gdk_directfb_pointer_grab   (GdkWindow           *window,
                                            gint                 owner_events,
index 7fe39118529afd50c9e473c28c8ee7c151e1b80c..4337cf98ef09821a254928c2153b56ef469b8c51 100644 (file)
@@ -600,7 +600,9 @@ _gdk_windowing_window_destroy (GdkWindow *window,
   impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
 
   _gdk_selection_window_destroyed (window);
-
+#if (DIRECTFB_MAJOR_VERSION >= 1)
+  gdk_directfb_event_windows_remove (window);
+#endif
   if (window == _gdk_directfb_pointer_grab_window)
     gdk_pointer_ungrab (GDK_CURRENT_TIME);
   if (window == _gdk_directfb_keyboard_grab_window)